<?php
/**
 * Registry-Klasse zur globalen Speicherung
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Final Class Yapary_Registry
{
    /** @var array $arrData	:	Feld mit allen gespeicherten Daten */
    static private $arrData = array();


    /**
     * Erstellt eine Variable
     * @param string $name	: Name der zu erstellenden Variable
     * @param mixed $value	: Wert zum Namen
     * @return boolean
     * */
    public static function set ($_name, $_object)
    {
		if (self::exists($_name)) {
			throw new Exception('Object <b>'.$_name.'</b> already exists');
			return false;
		}
		if (!is_object($_object)) {
			throw new Exception('Invalid Object <b>'.$_name.'</b>. To relocate this Object, use delete()');
			return false;
		}

        self::$arrData[$_name] = $_object;
	}


    /**
     * Liefert eine definierten Variable
     * @param string $name	: Name der zu erstellenden Variable
     * @return Object
     * */
    public static function get ($_name)
    {
        if (!isset(self::$arrData[$_name])) {
            return NULL;
        }

        return self::$arrData[$_name];
    }


    /**
     * loescht eine definierte Variable
     * @param string $name	: Name der zu erstellenden Variable
     * @return bool
     * */
    public static function delete ($_name)
    {
        if (isset(self::$arrData[$_name])) {
            unset(self::$arrData[$_name]);
            return true;
        }

        return false;
    }


    /**
     * Prueft, ob ein Datensatz bereits existiert
     * @param string $name	: Name der zu erstellenden Variable
     * @return bool
     * */
    public static function exists ($_name)
    {
	    if (isset(self::$arrData[$_name])) {
	    	return true;
	    }

	    return false;
	}


	/**
	 * Zaehlt die Anzahl an Eintraege
	 * @return int
	 * */
	public static function getCount ()
	{
		return (int) count(self::$arrData);
	}


	/**
	 * Gibt alle Eintraege in foglendem Format aus
	 * array('name1' => Object1, 'name2' => Object2, ...)
	 * @return array
	 * */
	public static function getList ()
	{
		return (array) self::$arrData;
	}


	public function __get($_name)
	{
		$this->get($_name);
	}


	public function __set($_name, $_object)
	{
		$this->set($_name, $_object);
	}


}


?>